//
//  UITextView+category.swift
//  表情键盘布局
//
//  Created by x on 2017/7/19.
//  Copyright © 2017年 HLB. All rights reserved.
//

import UIKit

extension UITextView {

    func insertEmoticon(emoticon: Emoticons) -> Void {
        
        //0.处理删除按钮
        if emoticon.isRemoveBtn {
            deleteBackward()
        }
        
        //1.判断是不是emoji表情
        if emoticon.emoticonStr != nil {
            replace(selectedTextRange!, withText: emoticon.emoticonStr!)
        }
        if emoticon.png != nil {
            //2.2根据附件创建属性字符串
            let imageText = EmoticonTextAttachment.imageText(emoticon: emoticon, font: font!)
            
            //2.3拿到当前TextView的内容
            let strM = NSMutableAttributedString(attributedString: attributedText)
            //2.4插入表情到当前光标的位子
            let range = selectedRange//光标选中的位置
            strM.replaceCharacters(in: range, with: imageText)
            
            //每次替换过字符串都要重新设置文本的尺寸大小
            //属性字符串有自己默认的字符串
            //第二种方法 解决文本属性不统一的情况
            strM.addAttribute(NSFontAttributeName, value: font!, range: NSMakeRange(range.location, 1))
            
            //2.5把替换过后的字符串赋值
            attributedText = strM
            
            //2.6恢复光标位置(第一个参数:指定光标所在的位置,第二个参数:选中文本的个数)
            selectedRange = NSMakeRange(range.location + 1, 0)
        }
    }
    
    func emoticonAttributedText() -> String {
        var strM = String()
        
        //使用枚举便利这个字符串
        attributedText.enumerateAttributes(in: NSMakeRange(0, attributedText.length), options: NSAttributedString.EnumerationOptions.init(rawValue: 0)) { (obj, range, _) in
            //1.判断有没有图片表情
            if obj["NSAttachment"] != nil {
                let attachment = obj["NSAttachment"] as! EmoticonTextAttachment
                strM += attachment.chs!
            }else {
                strM += (self.text as NSString).substring(with: range)//截取这个范围的字符串
            }
        }
        
        return strM
    }
}
